慶應SFC 2017年秋学期開口科目Data Science for Environmental Governance(Spatial Data Modeling)においてあまり扱わなかった空間データとcsvデータを結合し、空間データ分析を行う方法を解説することです。 具体的にはRを用いてshapeファイルとcsvデータを結合し、図に表し、Moran’s Iを計算するぐらいまでは解説したいと思います。
今回利用するデータはGitHubにて公開しています(https://github.com/N-Yukihiro/lectute_2017_spatial)。 shapeファイルは国土数値情報ダウンロードサービス(http://nlftp.mlit.go.jp/ksj/index.html)より東京都の行政区域をダウンロードしました。 そして、今回は空間データ分析によく利用される地価を分析したいと思います。 地価は平成29年地価公示価格(東京都分)(http://www.zaimu.metro.tokyo.jp/kijunchi/29kouji/index.html)より23区に該当する地域の住宅地価をcsvに直してlandprice.csvとして保存しています。
まずは今回利用するパッケージをインストールし、読み込みます。
install.packages(c("readr", "dplyr", "sf", "devtools","methods", "spdep"))
devtools::install_github("tidyverse/ggplot2")
library(readr)
library(dplyr)
library(sf)
library(ggplot2)
library(methods)
library(spdep)
readrはcsvなどを読み込むため、dplyrはデータフレームを操作するため、sfは空間データを操作するため、ggplot2は空間データを図に表すため、methodsはsfパッケージで読み込んだデータをspdepパッケージで扱えるように変換するため、spdepは空間データ分析のために使います。 なお、ggplot2は開発版を使います。
land_price <- readr::read_csv("landprice.csv", locale = locale(encoding = "cp932")) %>%
mutate(code_f = as.factor(code))
上のコードではreadrパッケージの中のread_csv関数を利用してcsvファイルを読み込みland_priceという変数に格納しています。 locale=locale(encoding="cp932")でShift-JISで読み込むことを指定しています。 次の行で整数値として格納されている市町村コードをファクターに直しています。
Dist <- sf::st_read(dsn = "shape", layer = "N03-17_13_170101",options = "ENCODING=cp932") %>%
dplyr::group_by(N03_007) %>%
dplyr::summarise(geometry = st_union(geometry)) %>%
dplyr::ungroup()
このコードではsfパッケージの中のst_read関数を利用してshapeファイルを読み込みDistという変数に格納しています。 dsnでshapeファイルが入っているフォルダを指定し、layerでshaperファイルを指定します。 Rのコードとshapeファイルが同じフォルダに入っている場合にはdsn = getwd()とします。 layerを指定するときに拡張子は書きません。
2行名以降では海を跨いでマルチフィーチャーになっているデータをシングルフィーチャーに直しています。
## Warning in instance$preRenderHook(instance): It seems your data is too
## big for client-side DataTables. You may consider server-side processing:
## http://rstudio.github.io/DT/server.html